# -*- coding: gbk -*-

import pymysql
import pandas as pd


# 用面向对象的方式编写，更加熟悉面向对象代码风格
class Mysql_csv(object):
    # 定义一个init方法，用于读取数据库
    def __init__(self):
        # 读取数据库和建立游标对象
        self.connect = pymysql.connect(host="127.0.0.1", port=3306, user="root", password="123456",
                                       database="test", charset="utf8")
        self.cursor = self.connect.cursor()

    # 定义一个del类，用于运行完所有程序的时候关闭数据库和游标对象
    def __del__(self):
        self.connect.close()
        self.cursor.close()

    def read_csv_colnmus(self):
        # 读取csv文件的列索引，用于建立数据表时的字段
        data = pd.read_csv("./pachong.csv", encoding="gbk")
        # 因为读取的数据类型是array一维数组，所以把他转化成列表更方便操作
        data_1 = list(data.columns)
        # print(data_1)
        return data_1

    def read_csv_values(self):
        # 读取csv文件数据
        data = pd.read_csv("./pachong.csv", encoding="gbk")
        print(data)
        data_3 = list(data.values)
        # print(data_3)
        return data_3

    def write_mysql(self):
        # 在数据表中写入数据，因为数据是列表类型，把他转化为元组更符合sql语句
        for i in self.read_csv_values():  # 因为数据是迭代列表，所以用循环把数据提取出来
            data_6 = tuple(i)
            sql = """insert into school values{}""".format(data_6)
            self.cursor.execute(sql)
            self.commit()
        print("植入完成")

    def commit(self):
        # 定义一个确认事务运行
        self.connect.commit()

    def create(self):
        # 创建数据表，用刚才提取的列索引作为字段
        data_2 = self.read_csv_colnmus()
        # print(data_2)
        sql = """create table school({0} int unsigned primary key not null auto_increment,{1} varchar(50),{2} varchar(100),{3} varchar(100),{4} varchar(100),{5} varchar(100),{6} varchar(20),{7} varchar(100),{8} varchar(200))""".format(
            data_2[0], data_2[1], data_2[3], data_2[2], data_2[4], data_2[5], data_2[6], data_2[7], data_2[8])
        self.cursor.execute(sql)
        self.commit()

    # 运行程序，记得要先调用创建数据的类，在创建写入数据的类
    def run(self):
        self.create()
        self.write_mysql()


# 最后用一个main()函数来封装
def main():
    sql = Mysql_csv()
    sql.run()


if __name__ == '__main__':
    main()
